package SEG_DataLayer;

import CommonDataLayer.ConexionDB;
import SEG_EntityLayer.SEG_AccesoEL;
import SEG_EntityLayer.SEG_MenuEL;
import SEG_EntityLayer.SEG_OpcionEL;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class SEG_AccesoDL {
    
    private final static SEG_AccesoDL _instancia = new SEG_AccesoDL();
    
    private SEG_AccesoDL() {
        
    }
    
    public static SEG_AccesoDL getInstancia() {
        return _instancia;
    }
    
    //-----------------------------------------------------------------------------
    // <editor-fold defaultstate="collapsed" desc="Select">
    
        /**
        * Obtiene lista con acceso de los usuarios.
        * @return  <code>true</code> si el usuario tiene acceso a la empresa y <code>false</code> en otro caso.
        * @author Juan Manuel Abanto Mera
        */
        public List<SEG_AccesoEL> ObtenerAccesoUsuario(byte empresa, byte modulo,short usuario) throws Exception {
            Connection conexion = null;
            try {
                conexion = ConexionDB.getInstancia().getConexion();
                CallableStatement sp = conexion.prepareCall("{call uspSEG_ObtenerAccesoUsuario(?,?,?) }");
                sp.setByte("prmintEmpresa", empresa);
                sp.setByte("prmintModulo", modulo);
                sp.setShort("prmintUsuario", usuario);
                ResultSet rs = sp.executeQuery();
                List<SEG_AccesoEL> lista = new ArrayList<SEG_AccesoEL>();
                
                while (rs.next()){
                    SEG_AccesoEL acceso = new SEG_AccesoEL();
                    SEG_OpcionEL opcion = new SEG_OpcionEL();
                    SEG_MenuEL menu = new SEG_MenuEL();
                    SEG_OpcionEL padre = new SEG_OpcionEL();
                    acceso.setAcceso(rs.getShort("Acceso"));
                    acceso.setAccesoDirecto(rs.getBoolean("AccesoDirecto"));
                    menu.setMenu(rs.getShort("Menu"));
                    menu.setNombre(rs.getString("DMenu"));
                    menu.setOrden(rs.getByte("MOrden"));
                    padre.setOpcion(rs.getShort("Padre"));
                    opcion.setOpcion(rs.getShort("Opcion"));
                    opcion.setNombre(rs.getString("DOpcion"));
                    opcion.setTooltip(rs.getString("Tooltip"));
                    opcion.setPaquete(rs.getString("Paquete"));
                    opcion.setFormulario(rs.getString("Formulario"));
                    opcion.setTipo(rs.getString("Tipo"));
                    opcion.setIcono(rs.getString("Icono"));
                    opcion.setOrden(rs.getByte("Orden"));
                    opcion.setSeparador(rs.getBoolean("Separador"));
                    opcion.setMenu(menu);
                    opcion.setPadre(padre);
                    acceso.setOpcion(opcion);
                    lista.add(acceso);
                }
                conexion.close();
                return lista;
            }
            catch(Exception ex) {
                throw new Exception(ex);
            }
            finally {
                if (conexion != null && !conexion.isClosed()) {
                    conexion.close();
                }
            }
        }
    
    // </editor-fold>
    
    //-------------------------------------------------------------------------------
    // <editor-fold defaultstate="collapsed" desc="Insert">
    // </editor-fold>
    
    //-------------------------------------------------------------------------------
    // <editor-fold defaultstate="collapsed" desc="Update">
    // </editor-fold>
    
    //------------------------------------------------------------------------------    
    // <editor-fold defaultstate="collapsed" desc="Delete">
    // </editor-fold>
    
}
